package top.xiaoazi.futureletterserver.utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {
    /**
     * 加盐并生成密码
     * @param password 明文密码
     * @return 最终密码
     */
    public static String encrypt(String password) {
        // 1. 生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2. 盐+密码 后用 md5 加密
        String saltPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes());
        // 3. 最终数据库最终保存的密码： 【盐值】 + ‘$’ + 【加盐加密后的密码】
        return salt + '$' + saltPassword;
    }

    /**
     * 验证时使用
     * @param password 明文密码
     * @param salt 盐值
     * @return 最终密码
     */
    public static String encrypt(String password, String salt) {
        // 1. 盐+密码 后用 md5 加密
        String saltPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes());
        // 2. 最终数据库最终保存的密码： 【盐值】 + ‘$’ + 【加盐加密后的密码】
        return salt + '$' + saltPassword;
    }

    /**
     * 对比是否相等
     * @param inputPassword
     * @param finalPassword
     * @return
     */
    public static boolean check(String inputPassword, String finalPassword) {
        if (!StringUtils.hasLength(inputPassword) ||
            !StringUtils.hasLength(finalPassword) ||
            finalPassword.length() < 65) {
            return false;
        }

        // 1. 去除盐值
        String salt = finalPassword.split("\\$")[0];
        // 2. inputPassword 根据盐值加密
        inputPassword = PasswordUtils.encrypt(inputPassword, salt);
        // 3. 返回是否相等
        return inputPassword.equals(finalPassword);
    }
}
